#include "pch.h"
#include "GRiMaterial.h"
#include <GGenericInfra/GGiEngineUtil.h>

GMath::Vector3 GRiMaterial::BRDF(const GRiVertex& v, const GMath::Vector3& wi, const GMath::Vector3& wo)const
{
// 	GMath::Vector3 normal = v.Normal;
// 	GMath::Vector3 diffuse = kd;
// 	if (mBUseAlbedo)
// 	{
// 		//diffuse
// 	}
// 	if (mBUseBump)
// 	{
// 		//
// 		//normal = v.Normal;
// 	}
	// TODO
	switch (type)
	{
	case BRDF::Lambert:
		if (v.Normal.Dot(wo) > GGiEngineUtil::EPSILION)
			return kd / GGiEngineUtil::PI;
		else
			return GMath::Vector3(0.0f);
		break;
	default:
		break;
	}
}

float GRiMaterial::PDF(const GRiVertex& v, const GMath::Vector3& wi, const GMath::Vector3& wo) const
{
// 	GMath::Vector3 normal = v.Normal;
// 	if (mBUseBump)
// 	{
// 		//
// 		normal = v.Normal;
// 	}
	switch (type)
	{
	case BRDF::Lambert:
		if (v.Normal.Dot(wo) > GGiEngineUtil::EPSILION)
			return 0.5f / GGiEngineUtil::PI;
		else
			return 0.0f;
		break;
	default:
		break;
	}
}
